#!/system/bin/sh

# 全局变量：存储已安装包的缓存（内存中，脚本运行期间有效）
# 格式：仅保留包名（如 com.example.app，去掉前缀 "package:"）
PKG_CACHE=""


# 生成并缓存已安装包列表（仅第一次调用时执行）
# 缓存内容：所有已安装包的包名，每行一个
generate_pkg_cache() {
    # 若缓存已存在，直接返回
    if [ -n "$PKG_CACHE" ]; then
        return 0
    fi

    echo "首次执行，生成包列表缓存..."
    # 执行 pm list packages 获取所有包，去除 "package:" 前缀，存入缓存
    # 过滤空行（避免可能的空输出）
    PKG_CACHE=$(pm list packages 2>/dev/null | sed 's/^package://' | grep -v '^$')

    # 检查 pm 命令是否成功执行（部分设备可能限制权限）
    if [ -z "$PKG_CACHE" ]; then
        echo "警告：生成包缓存失败（可能无权限），后续检查将直接调用 pm 命令"
        echo "警告：生成包缓存失败（可能无权限），后续检查将直接调用 pm 命令" > /data/local/tmp/error_3894.log
    fi
}


# 检查包是否已安装（优先使用缓存，缓存失效时降级为直接调用 pm）
# 参数：$1 为目标包名
# 返回：0（已安装）、1（未安装）、2（参数错误）
check_package_installed() {
    local pkg="$1"
    if [ -z "$pkg" ]; then
        echo "错误：请提供目标包名"
        return 2
    fi

    # 先尝试生成缓存（首次调用时生成，后续直接使用）
    generate_pkg_cache
    # 若缓存有效，从缓存中查找（精确匹配包名）
    if [ -n "$PKG_CACHE" ]; then
        # 使用 grep -x 确保精确匹配（避免子串误判）
        if echo "$PKG_CACHE" | grep -x "$pkg" >/dev/null 2>&1; then
            return 0  # 已安装
        else
            return 1  # 未安装
        fi
    else
        # 缓存失效时，降级为直接调用 pm 检查（兼容权限问题）
        if pm list packages "$pkg" >/dev/null 2>&1; then
            return 0  # 已安装
        else
            return 1  # 未安装
        fi
    fi
}
